home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 March / Macworld (1998-03) (Disk 1).dmg / Shareware World / Info / For Developers / GhostScript 5.10 / MacGS-510 / files / gs_mac.ps < prev    next >
Text File  |  1997-11-17  |  4KB  |  177 lines

  1. %    Copyright (C) 1995, 1997 Aladdin Enterprises.  All rights reserved.
  2. % This file is part of Aladdin Ghostscript.
  3. % Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  4. % or distributor accepts any responsibility for the consequences of using it,
  5. % or for whether it serves any particular purpose or works at all, unless he
  6. % or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  7. % License (the "License") for full details.
  8. % Every copy of Aladdin Ghostscript must include a copy of the License,
  9. % normally in a plain ASCII text file named PUBLIC.  The License grants you
  10. % the right to copy, modify and redistribute Aladdin Ghostscript, but only
  11. % under certain conditions described in the License.  Among other things, the
  12. % License requires that the copyright notice and this notice be preserved on
  13. % all copies.
  14.  
  15.  
  16. % executive is redefined so that .setinterpstate gets called.  This in
  17. % lets MacGS know what state the interpreter is in so it can
  18. % display the correct menus and various dialogs and cursors.
  19.  
  20. /.interpstateinput 2 def
  21. /.interpstaterun   4 def
  22. /.interpstatepause 8 def
  23.  
  24. /executive
  25.     { { prompt
  26.         .interpstateinput .setinterpstate
  27.          { (%statementedit) (r) file } stopped
  28.          { pop pop $error /errorname get /undefinedfilename eq
  29.         { exit } if        % EOF
  30.            handleerror null        % ioerror??
  31.          }
  32.         if
  33.         .interpstaterun .setinterpstate
  34.         cvx execute
  35.       } loop
  36.     } odef
  37.  
  38. /.confirm
  39.     { pop } bind def
  40.  
  41.  
  42. % .newwindow creates a new output device for the Mac
  43.  
  44. /.newwindow    % hwres pagesize BitsPerPixel GraphicsAlphaBits TextAlphaBits title visible -> -
  45.     {
  46.         mark 8 1 roll
  47.         /HWResolution 8 1 roll
  48.         /PageSize 7 1 roll
  49.         /BitsPerPixel 6 1 roll
  50.         /TextAlphaBits 5 1 roll
  51.         /GraphicsAlphaBits 4 1 roll
  52.         /GSTitle 3 1 roll
  53.         /GSVisible exch
  54.         currentdevice copydevice
  55.         putdeviceprops
  56.         setdevice
  57.     } def
  58.  
  59. % .newfile creates a output file for an arbitrary device
  60.  
  61. /.newfile    % hwres pagesize outputfile -> -
  62.     {
  63.         mark 4 1 roll
  64.         /HWResolution 4 1 roll
  65.         /PageSize 3 1 roll
  66.         /OutputFile exch
  67.         currentdevice
  68.         putdeviceprops
  69.         pop
  70.     } def
  71.  
  72. % .closefile closes a file by setting the output file to be a dash
  73.  
  74. /.closefile    % --
  75.     { mark /OutputFile (-) currentdevice putdeviceprops pop } def
  76.  
  77. % .beginjob and .endjob are used to 'wrap' rendering of files
  78. % so that one file can't corrupt the VM state for another.
  79. % Both procedures assume one value on the stack which they
  80. % preserve.
  81.  
  82. % This pair does the full save and restore of the VM environment
  83. % What was on the operand and dictionary stacks before the .beginjob
  84. % will be restored after the .endjob.
  85.  
  86. % /.beginjob            % |- old...stack proc -> proc
  87. %     { save
  88. %         5 dict dup
  89. %         serverdict /.jobinfo 3 2 roll put
  90. %         begin
  91. %             /saveid exch def
  92. %             /proc exch def
  93. %               count array astore /ostack exch def
  94. %               /proc load
  95. %           end
  96. %           serverdict /.jobinfo get
  97. %           /dstack countdictstack array dictstack put
  98. %     } def
  99. % /.endjob            % |- junk...stack result -> old...stack result
  100. %     {
  101. %         serverdict /.jobinfo known {
  102. %             cleardictstack
  103. %     
  104. %             serverdict /.jobinfo get begin
  105. %                 /result exch def
  106. %                 clear ostack aload pop
  107. %                 result
  108. %                 saveid
  109. %                 dstack
  110. %             end
  111. %             dup length 1 sub countdictstack exch 1 exch
  112. %             { 1 index exch get begin } for
  113. %             pop
  114. %         restore
  115. %         } if
  116. %     } def
  117.  
  118. % This pair just does a save and restore.  It cleans out
  119. % the operand and dictionay stack both before and after.
  120.  
  121. % /.beginjob        % |- ... proc -> proc
  122. %     {
  123. %         count 1 roll
  124. %         count 1 sub { pop } repeat
  125. %         cleardictstack
  126. %         save
  127. %         serverdict /.jobinfo 3 2 roll put
  128. %     } def
  129. %     
  130. % /.endjob        % |- ... result -> result
  131. %     {
  132. %         count 1 roll
  133. %         count 1 sub { pop } repeat
  134. %         cleardictstack
  135. %         serverdict /.jobinfo get
  136. %         restore
  137. %     } def
  138.  
  139.  
  140. % This pair does no job saving what so ever.
  141.  
  142. /.beginjob { } def
  143. /.endjob { } def
  144.  
  145.  
  146. % .runjob is called from the application when you open a file
  147.  
  148. /.runjob        % proc -> -
  149.     {
  150.         .beginjob
  151.             stopped
  152.         .endjob
  153.         { stop } if
  154.     } def
  155.  
  156.  
  157. % our way of handling user interrupts
  158.  
  159. errordict begin
  160.   /interrupt {
  161.                       % do the normal errorhandler, but ignore its stop
  162.       /interrupt dup
  163.       systemdict /.errorhandler get stopped pop
  164.       .clearerror        % so stacks don't get printed
  165.       
  166.       (\nInterrupted by user.\n) print
  167.                     % tell the user
  168.     stop            % propigate the interrupt
  169.   } bind def
  170. end
  171.  
  172.     
  173.